#include<iostream>
#include<vector>

using namespace std ;

const int maxn = 30 ;

//n 个数中选 maxK个数 ， 和为 sumX , 算平方和最大的maxSumSqu
int n , maxK , sumX , maxSumSqu = -1;

//存放整数
int number[maxn] ;

//temp存放临时方案 ， ans 存放最大平方和方案
vector<int> ans , temp ;


void DFS(int index , int nowK , int sum , int sumSqu) {
    if(sumX == sum && nowK == maxK) {
        if(sumSqu > maxSumSqu) {
            maxSumSqu = sumSqu ;
            ans = temp ;
        }
    }

    if(index == n || nowK > maxK || sum > sumX) {
        return ;
    }

    temp.push_back(number[index]);
    DFS(index + 1 , nowK + 1 , sum + number[index] , sumSqu + number[index] * number[index]);
    temp.pop_back() ;
    DFS(index + 1 , nowK , sum , sumSqu) ;
}


int main() {
    scanf("%d%d%d" , &n , &maxK , &sumX) ;
    for (int i = 0; i < n; ++i) {
        scanf("%d" , &number[i]);
    }
    DFS(0 , 0 , 0 , 0);
    for (int i = 0; i < n; ++i) {
        printf("%d " , ans[i]);
    }
    return 0 ;
}